/**
 * 项目名称：
 * 包    名：com.cbdata.educloud.core.web.thirdapp
 * 文 件 名：ThirdAppOauth2Controller.java
 * 版本信息：
 * 日    期：2018年4月2日-下午7:01:03
 * Copyright (c) 2018河南中联大数据科技有限公司-版权所有
 * 
 */
package com.corecloud.other;

import com.corecloud.tools.HttpUtil;
import com.corecloud.tools.SpringHttpService;
import lombok.extern.apachecommons.CommonsLog;
import org.apache.commons.codec.binary.Base64;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;

/**
 * 类 名 称：ThirdAppOauth2Controller
 * 类 描 述：旧版本的中职管理系统oauth2适配认证【对方系统麻烦,暂时不愿意实现oauth2认证,我就帮他自己认证一下】
 * 创 建 人：luhui
 * 修 改 人：luhui
 * 修改时间：2018年4月2日 下午7:01:03
 * 修改备注：
 * @version 1.0.0
 */
@Controller
@CommonsLog
@RequestMapping("/edu2ndmaj")
public class Edu2ndmajOauth2Controller {

	String edu2ndmajAppId = "5c96cd0aa68b476599d4ef66261877d3";
	String edu2ndmajSecret = "82cd43d844e24dac9bfbf50e50fa7833";

	String oauth2BasePath = "http://127.0.0.1:8082/";
//	String oauth2BasePath = "http://127.0.0.1:8140/";
//	String oauth2BasePath = "http://corecloud.hnzj.hneduit.com";
//		String oauth2BasePath = "http://zzdsj.haedu.gov.cn/";

//	String edu2ndmajloginUrl = "http://122.114.23.131/redirect.jsp";
	String edu2ndmajloginUrl = "http://szz.haedu.gov.cn/redirect.jsp";

	

	@RequestMapping(value="/toappoauth2")
	public ModelAndView toAppOAuth2(HttpServletRequest request) {
		log.info("开始准备向教育云平台的发起授权处理......");
		
		String oauthUrl = oauth2BasePath + "/oauth/authorize";
		ModelAndView view = new ModelAndView( "redirect:"+oauthUrl);
		view.addObject("client_id", edu2ndmajAppId);
		view.addObject("response_type", "code");
		view.addObject("redirect_uri", oauth2BasePath + "/edu2ndmaj/oauth2success");
		return view;
	}
	
	
	@RequestMapping("/oauth2success")
	public ModelAndView Oauth2success(String code, HttpServletRequest request) {
		Map<String, Object> resMap = new HashMap<String, Object>();
		log.info("用户允许授权......");
		log.info("授权码为:"+code);
		resMap = this.getResponseResultWithSpringHttpByCode(code);
		log.info("授权响应成功......");
		log.info("教育云平台授权结果:"+resMap);
		//此时就可以通过第三方提供的API,此处为中职系统,跳转直接登录。
		ModelAndView view = new ModelAndView( "redirect:" + edu2ndmajloginUrl);
		String loginpassword = (String)request.getSession().getAttribute("loginpassword");
		String loginusername = (String)request.getSession().getAttribute("loginusername");
		view.addObject("username", loginusername);
		view.addObject("password",loginpassword);
		return view;
	}
	
	/**
	 * 
	 * @Title: getBodyParamMap
	 * @Description: 根据获取的code组装参数
	 * @param code
	 * @return 
	 * Map<String,Object>
	 * 创 建 人：luhui
	 * 创建时间:2018年4月9日 下午4:37:04
	 * 修 改 人：luhui
	 * 修改时间:2018年4月9日 下午4:37:04
	 * @since  1.0.0
	 */
	public Map<String, Object> getBodyParamMap(String code) {
		Map<String, Object> paramBody = new HashMap<String, Object>();
		paramBody.put("grant_type", "authorization_code");
		paramBody.put("code", code);
		paramBody.put("redirect_uri", oauth2BasePath + "/edu2ndmaj/oauth2success");
		paramBody.put("client_id", edu2ndmajAppId);
		return paramBody;
	}
	/**
	 * 
	 * @Title: getResponseResultWithSpringHttpByCode
	 * @Description: 用springHttp的方式获取响应结果
	 * @param code
	 * @return 
	 * Map<String,Object>
	 * 创 建 人：luhui
	 * 创建时间:2018年4月9日 下午4:37:29
	 * 修 改 人：luhui
	 * 修改时间:2018年4月9日 下午4:37:29
	 * @since  1.0.0
	 */
	public Map<String, Object> getResponseResultWithSpringHttpByCode(String code) {

//		Map<String, Object> paramMap = new HashMap<String, Object>();
//		paramMap.put("grant_type", "authorization_code");
//		paramMap.put("code", code);
////		paramMap.put("redirect_uri", oauth2SuccessUrl);
//		paramMap.put("client_id", edu2ndmajAppId);
//		String urlStr = "http://"+edu2ndmajAppId+":"+ edu2ndmajSecret+"@"+oauth2BasePath.replace("http://", "")+"/oauth/token";
//		Map<String, Object> resMap = HttpUtil.getResponseResult(paramMap, urlStr);

		Map<String, Object> paramBody = this.getBodyParamMap(code);
		String auth = edu2ndmajAppId+":"+edu2ndmajSecret;
		byte[] authEncBytes = Base64.encodeBase64(auth.getBytes());
		String authStringEnc = new String(authEncBytes);
		Map<String, String> paramHeader = new HashMap<String, String>();
		paramHeader.put("Authorization", "Basic " + authStringEnc);
		Map<String, Object> resMap  = SpringHttpService.getResponseResultMapByPost(paramBody, paramHeader, oauth2BasePath+"/oauth/token");
		return resMap;
	}


}
